package jwj8508.swing;

import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;

// 메뉴 작성법
// JMenuBar -> JMenu -> JMenuItem

public class SwingMenu extends JMenuBar {
	
	private JMenu mnFile = null;	// 파일
	private JMenu mnEdit = null;	// 편집
	private JMenu mnView = null;	// 보기
	private JMenu mnTool = null;	// 도구
	private JMenu mnWnd = null;		// 윈도우
	private JMenu mnHelp = null;	//도움말
	
	private static SwingMenuActionListener mnal = null;
	
	public SwingMenu() {		
		mnal = new SwingMenuActionListener();		
		makeMenu();
		makeMenuItem();
		addShortCut();
		addMenu();
		
	}



	// 메뉴바에 추가할 메뉴 생성
	private void makeMenu() {
		mnFile = new JMenu(" 파 일 (F) ");	
//		mnFile.setFont(new Font("굴림", Font.PLAIN, 12));
		// 메뉴 글꼴 변경을 위해 setFont메서드 사용
		// 하지만 모든 메뉴와 메뉴항목에 setFont를 사용하는 것은 무척 번거로운 일임
		// 폰트를 다른것으로 바꾸는 날이면....ㅠㅜ
		// 따라서 프로그램 전체 글꼴을 변경하는 방법을 이용
		// main메서드에서 FontUIresource 이용
		mnEdit = new JMenu(" 편 집 (E) ");
		mnView = new JMenu(" 보 기 (V) ");
		mnTool = new JMenu(" 도 구 (T) ");
		mnWnd = new JMenu(" 창 (W) ");
		mnHelp = new JMenu(" 도움말 (H) ");

		
	}

	
	// 메뉴 항목에 단축키 지정
	private void addShortCut() {
		mnFile.setMnemonic(KeyEvent.VK_F);
		mnEdit.setMnemonic(KeyEvent.VK_E);
		mnView.setMnemonic(KeyEvent.VK_V);
		mnTool.setMnemonic(KeyEvent.VK_T);
		mnWnd.setMnemonic(KeyEvent.VK_W);
		mnHelp.setMnemonic(KeyEvent.VK_H);
		
	}
	
	// 생성 및 설정된 메뉴를 메뉴바에 추가
	private void addMenu() {
		add(mnFile);
		add(mnEdit);
		add(mnView);
		add(mnTool);
		add(mnWnd);
		add(mnHelp);
		
	}
	
	// 메뉴에 추가할 메뉴항목menuitem 생성
	// 배열 이용하면 쬐끔 편해짐
	private JMenuItem makeMenuItems(String text, String img, int skey, boolean off, int akey) {
		String icon = null;	// 메뉴에 쓸 아이콘
		if(img != null){	// 아이콘 이미지가 있으면
			icon = "/images/menu/" + img + ".png";
		}
		
		JMenuItem mnitem = null;	// 메뉴 항목
		try {
			mnitem = new JMenuItem(text, new ImageIcon(getClass().getResource(icon)));
		} catch (Exception ex) {
			mnitem = new JMenuItem(text);
		}
		
		mnitem.setEnabled(off);	// 메뉴 활성/비활성
		mnitem.setMnemonic(skey);
		mnitem.setAccelerator(KeyStroke.getKeyStroke(akey, ActionEvent.CTRL_MASK));	// 단축키				
		
		mnitem.addActionListener(mnal);	
		
		mnitem.setActionCommand(img);
		
		return mnitem;
	}
	
	// 메뉴에 메뉴항목 추가
	private void makeMenuItem() {		
		mnFile.add(makeMenuItems("새 파일 (N)", "new", KeyEvent.VK_N, true, KeyEvent.VK_N));		
		mnFile.add(makeMenuItems("열 기 (O)", "open", KeyEvent.VK_O, true, KeyEvent.VK_O));		
		mnFile.addSeparator();
		mnFile.add(makeMenuItems("닫 기 (C)", "close", KeyEvent.VK_C, false, KeyEvent.VK_C));
		mnFile.addSeparator();
		mnFile.add(makeMenuItems("저장하기 (S)", "save", KeyEvent.VK_S, true, KeyEvent.VK_S));
		mnFile.addSeparator();
		mnFile.add(makeMenuItems("종 료 (X)", "exit", KeyEvent.VK_X, true, KeyEvent.VK_X));
		
		mnHelp.add(makeMenuItems("정 보 (A)", "plane", KeyEvent.VK_A, true, KeyEvent.VK_A));
		
	}
	
	
}
